A number of memory devices, such as flash memory devices, use analog memory cells to store data. Each memory cell stores an analog value, also referred to as a storage value, such as an electrical charge or voltage. The storage value represents the information stored in the cell. In flash memory devices, for example, each analog memory cell typically stores a certain voltage. The range of possible analog values for each cell is typically divided into threshold regions, with each region corresponding to one or more data bit values. Data is written to an analog memory cell by writing a nominal analog value that corresponds to the desired one or more bits.
The analog values stored in memory cells are often distorted. The distortions are typically due to, for example, back pattern dependency (BPD), noise and intercell interference (ICI). A number of techniques have been proposed or suggested for mitigating the effect of noise. ICI, and other distortions. It is important that such mitigation techniques do not unnecessarily impair the write-read speeds for flash read channels. Thus, many effective signal processing and decoding techniques are avoided that would introduce inherent processing delays. Foregoing such complex signal processing techniques, however, reduces the ability of the flash control system designer to maintain sufficient decoding accuracy as flash device geometries scale down.
The smallest writable data unit in a flash memory device is referred to as a page. A page can comprise several codewords of a read channel error correction code (ECC), which is the smallest readable data unit. Depending on the mapping of page bits into memory cell voltages, there is usually a significant statistical correlation among errors in pages mapped to the same wordline. Thus, it has been recognized that there are benefits to coding across multiple pages. In order to maintain high write and read speeds in flash memory devices, however, pages are typically written and decoded on-the-fly, independently from other pages. A need exists for a decoder design that allows a page to be decoded on-the-fly in a normal mode of operation, while optionally also supporting decoding across multiple pages if a failure occurs, which typically rarely happens.